package middleware

import (
	"fmt"
	"net"
	"xinduobang/stock/common"
	"xinduobang/stock/core/log"
)

var currentIp string

func init() {
	var err error
	currentIp, err = getInternalIP()
	if err != nil {
		log.Error("get internal ip error: %v", err)
	}
}

func getMatchine() string {
	cfg := common.GetConfig()
	return fmt.Sprintf("%s:%d", currentIp, cfg.Server.Port)
}

func getInternalIP() (string, error) {
	// 获取所有网络接口信息
	ifaces, err := net.Interfaces()
	if err != nil {
		return "", err
	}

	// 遍历所有网络接口，找到第一个非loopback、非IPv6、非虚拟接口的IPv4地址
	for _, iface := range ifaces {
		if iface.Flags&net.FlagUp == 0 || iface.Flags&net.FlagLoopback != 0 {
			continue
		}

		addrs, err := iface.Addrs()
		if err != nil {
			return "", err
		}

		for _, addr := range addrs {
			// 检查IP地址是否为IPv4
			if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
				if ipnet.IP.To4() != nil {
					return ipnet.IP.String(), nil
				}
			}
		}
	}

	return "", nil // 没有找到符合条件的IPv4地址
}
